package com.intelligent.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.intelligent.entity.Permission;
import com.intelligent.service.PermissionService;
import com.intelligent.mapper.PermissionMapper;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;

/**
* @author lenovo
* @description 针对表【t_permission(系统权限表)】的数据库操作Service实现
* @createDate 2025-08-27 14:20:55
*/
@Service
public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permission>
    implements PermissionService {
    
    /**
     * 初始化权限数据
     * 应用启动时，如果权限表为空，则初始化基础权限数据
     */
    @PostConstruct
    public void initPermissions() {
        // 检查权限表是否为空
        LambdaQueryWrapper<Permission> queryWrapper = new LambdaQueryWrapper<>();
        long count = this.count(queryWrapper);
        
        if (count == 0) {
            // 权限表为空，初始化基础权限数据
            List<Permission> permissions = new ArrayList<>();
            
            // 商品管理权限
            Permission productManage = new Permission();
            productManage.setPermissionName("商品管理");
            productManage.setPermissionCode("product:manage");
            productManage.setPermissionType(1); // 菜单权限
            productManage.setParentId(0L); // 顶级权限
            permissions.add(productManage);
            
            // 商品管理子权限
            Permission newProduct = new Permission();
            newProduct.setPermissionName("新建商品");
            newProduct.setPermissionCode("product:add");
            newProduct.setPermissionType(2); // 按钮权限
            newProduct.setParentId(1L); // 商品管理的子权限
            permissions.add(newProduct);
            
            Permission checkProduct = new Permission();
            checkProduct.setPermissionName("查看商品");
            checkProduct.setPermissionCode("product:view");
            checkProduct.setPermissionType(2); // 按钮权限
            checkProduct.setParentId(1L); // 商品管理的子权限
            permissions.add(checkProduct);
            
            Permission uploadProduct = new Permission();
            uploadProduct.setPermissionName("上架商品");
            uploadProduct.setPermissionCode("product:upload");
            uploadProduct.setPermissionType(2); // 按钮权限
            uploadProduct.setParentId(1L); // 商品管理的子权限
            permissions.add(uploadProduct);
            
            Permission downloadProduct = new Permission();
            downloadProduct.setPermissionName("下架商品");
            downloadProduct.setPermissionCode("product:download");
            downloadProduct.setPermissionType(2); // 按钮权限
            downloadProduct.setParentId(1L); // 商品管理的子权限
            permissions.add(downloadProduct);
            
            Permission brandManage = new Permission();
            brandManage.setPermissionName("品牌管理");
            brandManage.setPermissionCode("brand:manage");
            brandManage.setPermissionType(2); // 按钮权限
            brandManage.setParentId(1L); // 商品管理的子权限
            permissions.add(brandManage);
            
            Permission categoryManage = new Permission();
            categoryManage.setPermissionName("类目管理");
            categoryManage.setPermissionCode("category:manage");
            categoryManage.setPermissionType(2); // 按钮权限
            categoryManage.setParentId(1L); // 商品管理的子权限
            permissions.add(categoryManage);
            
            // 订单管理权限
            Permission orderManage = new Permission();
            orderManage.setPermissionName("订单管理");
            orderManage.setPermissionCode("order:manage");
            orderManage.setPermissionType(1); // 菜单权限
            orderManage.setParentId(0L); // 顶级权限
            permissions.add(orderManage);
            
            // 订单管理子权限
            Permission checkOrder = new Permission();
            checkOrder.setPermissionName("查看订单");
            checkOrder.setPermissionCode("order:view");
            checkOrder.setPermissionType(2); // 按钮权限
            checkOrder.setParentId(8L); // 订单管理的子权限
            permissions.add(checkOrder);
            
            Permission productShip = new Permission();
            productShip.setPermissionName("商品发货");
            productShip.setPermissionCode("order:ship");
            productShip.setPermissionType(2); // 按钮权限
            productShip.setParentId(8L); // 订单管理的子权限
            permissions.add(productShip);
            
            Permission takeOrder = new Permission();
            takeOrder.setPermissionName("取消订单");
            takeOrder.setPermissionCode("order:cancel");
            takeOrder.setPermissionType(2); // 按钮权限
            takeOrder.setParentId(8L); // 订单管理的子权限
            permissions.add(takeOrder);
            
            Permission importShip = new Permission();
            importShip.setPermissionName("确认收货");
            importShip.setPermissionCode("order:confirm");
            importShip.setPermissionType(2); // 按钮权限
            importShip.setParentId(8L); // 订单管理的子权限
            permissions.add(importShip);
            
            Permission refund = new Permission();
            refund.setPermissionName("退款");
            refund.setPermissionCode("order:refund");
            refund.setPermissionType(2); // 按钮权限
            refund.setParentId(8L); // 订单管理的子权限
            permissions.add(refund);
            
            // 客户管理权限
            Permission customerManage = new Permission();
            customerManage.setPermissionName("客户管理");
            customerManage.setPermissionCode("customer:manage");
            customerManage.setPermissionType(1); // 菜单权限
            customerManage.setParentId(0L); // 顶级权限
            permissions.add(customerManage);
            
            // 客户管理子权限
            Permission customerDetail = new Permission();
            customerDetail.setPermissionName("客户详情");
            customerDetail.setPermissionCode("customer:detail");
            customerDetail.setPermissionType(2); // 按钮权限
            customerDetail.setParentId(14L); // 客户管理的子权限
            permissions.add(customerDetail);
            
            Permission customerTag = new Permission();
            customerTag.setPermissionName("客户标签");
            customerTag.setPermissionCode("customer:tag");
            customerTag.setPermissionType(2); // 按钮权限
            customerTag.setParentId(14L); // 客户管理的子权限
            permissions.add(customerTag);
            
            Permission newTag = new Permission();
            newTag.setPermissionName("新建标签");
            newTag.setPermissionCode("tag:add");
            newTag.setPermissionType(2); // 按钮权限
            newTag.setParentId(14L); // 客户管理的子权限
            permissions.add(newTag);
            
            Permission deleteTag = new Permission();
            deleteTag.setPermissionName("删除标签");
            deleteTag.setPermissionCode("tag:delete");
            deleteTag.setPermissionType(2); // 按钮权限
            deleteTag.setParentId(14L); // 客户管理的子权限
            permissions.add(deleteTag);
            
            Permission sendCoupon = new Permission();
            sendCoupon.setPermissionName("发优惠券");
            sendCoupon.setPermissionCode("coupon:send");
            sendCoupon.setPermissionType(2); // 按钮权限
            sendCoupon.setParentId(14L); // 客户管理的子权限
            permissions.add(sendCoupon);
            
            Permission sendPoints = new Permission();
            sendPoints.setPermissionName("送积分");
            sendPoints.setPermissionCode("points:send");
            sendPoints.setPermissionType(2); // 按钮权限
            sendPoints.setParentId(14L); // 客户管理的子权限
            permissions.add(sendPoints);
            
            Permission memberLevel = new Permission();
            memberLevel.setPermissionName("修改会员等级");
            memberLevel.setPermissionCode("member:update");
            memberLevel.setPermissionType(2); // 按钮权限
            memberLevel.setParentId(14L); // 客户管理的子权限
            permissions.add(memberLevel);
            
            // 批量保存权限数据
            this.saveBatch(permissions);
        }
    }
}




